package javase.homework.design_company_and_position;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class RecruitmentSystem {
    //存储公司 集合
    public static List<Company> companies = new ArrayList<>();
    //通过map进行存储 <公司id，职位数量> => <公司id <公司地址，数量>>
    public static Map<Integer,Map<String,Integer>> map = new HashMap<>();
    //存储职位 集合
    public static List<Position> positions = new ArrayList<>();
    //数组 存储 计算机类 公司岗位
    public static Position[] positionComputer = new Position[5];
    //数组存入数量
    public static Integer size = 0;
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("计算机");
        list1.add("通信");
        list1.add("网络设备");
        Company company1 = new Company(101, "珠海市魅族科技有限公司", "民营公司",list1);
        List<String> list2 = new ArrayList<>();
        list2.add("软件");
        list2.add("大数据");
        Company company2 = new Company(102, "慧博云通科技股份有限公司", "民营公司",list2);
        List<String> list3 = new ArrayList<>();
        list3.add("计算机");
        list3.add("系统");
        list3.add("数据服务");
        list3.add("维修");
        Company company3 = new Company(103, "中国移动", "国企公司",list3);
        Position position1 = new Position(901,"JAVA开发工程师",company1,5000,8000,"南京","本科学历");
        Position position2 = new Position(902,"系统开发工程师",company1,4000,9000,"无锡","本科学历");
        Position position3 = new Position(903,"运维工程师",company2,3000,5000,"上海","本科学历");
        Position position4 = new Position(904,"实施工程师",company2,6000,8000,"上海","本科学历");
        Position position5 = new Position(905,"JAVA开发工程师",company3,7000,10000,"南京","本科学历");
        ReleaseWork(position1);//插入
        ReleaseWork(position2);//插入
        ReleaseWork(position3);//插入
        ReleaseWork(position4);//插入
        ReleaseWork(position5);//插入失败

        //统计每个公司各地区的岗位发布数量
        System.out.println("岗位发布数量");
        NumberOfPosition(company1.getCompanyName());
        NumberOfPosition(company2.getCompanyName());

        //将计算机公司存储到 companies 当中
        companies.add(company1);
        companies.add(company2);
        companies.add(company3);
        System.out.println("------查询计算机类公司-----");

        //查询出"计算机"类的公司 招聘的岗位，存储到数组中
        selectComputerPosition();

        //遍历
        for (int i = 0; i < size; i++) {
            System.out.println(positionComputer[i]);
        }
    }

    /**
     * （3）查询出"计算机"类的公司 招聘的岗位，存储到数组中
     */
    public static void selectComputerPosition(){
        //1.先查询出来计算机类公司
        for (Company company : companies) {
            if (company.getCompanyPosition().get(0).equals("计算机")){
                //找到计算机公司
                for (Position position : positions) {
                    if (position.getCompanyName() == company) {
                        //找到对应系统中的岗位
                        positionComputer[size++] = position;
                    }
                }
            }
        }
        //2.去 positions 集合当中查找 对应公司的岗位
    }

    /**
     * （2）统计每个公司 各地区 的岗位发布数量
     * positions 存储职位的集合
     */
    public static void NumberOfPosition(String companyName){
        Map<String,Integer> tempMap = new HashMap<>();
        for (int i = 0; i < positions.size(); i++) {
            if (companyName.equals(positions.get(i).getCompanyName().getCompanyName())) {
                if (tempMap.size() == 0) {
                    tempMap.put(positions.get(i).getPositionAddress(), 1);
                } else {
                    //bug
                    if (tempMap.get(positions.get(i).getPositionAddress()) == null)
                        tempMap.put(positions.get(i).getPositionAddress(), 1);
                    else
                        tempMap.put(positions.get(i).getPositionAddress(), tempMap.get(positions.get(i).getPositionAddress()) + 1);
                }
            }
        }
        System.out.println(tempMap);
    }

    /**
     * 公司中有个方法 发布职位，最多只能发布5个职位，且不能发布重复的职位
     */
    public static void ReleaseWork(Position position){
        //先判断数组有没有满
        if (positions.size() == 5) {
            System.out.println("职位发布数量已满");
            return;
        }//这边后续可改异常
        //内部进行以此判断：数组内部对象职位有没有重复
        for (Position position1 : positions) {
            if(position1.getPositionName().equals(position.getPositionName())){
                System.out.println("职位重复");
                return;
            }
        }
        positions.add(position);
    }
}
